package com.app.util.validate;

import java.util.regex.Pattern;

import com.app.util.type.DoubleUtil;
import com.app.util.type.FloatUtil;


public class Validater {

	
	/**
	 * 验证字符串
	 * 
	 * @param str
	 *            目的字符串
	 * @param patn
	 *            正则
	 * @return
	 */
	public static boolean validate(String value, Pattern patn) {
		if (value == null)
			return false;
		return patn.matcher(value).matches();
	}

	/**
	 * 验证字符串
	 * 
	 * @param str
	 *            目的字符串
	 * @param patnString
	 *            正则字符串
	 * @return
	 */
	public static boolean validate(String value, String patnString) {
		return validate(value, Pattern.compile(patnString));
	}

	/**
	 * 条件表达式(数值)验证 <br>
	 * 
	 * @param value
	 *            给定的数值<br>
	 *            如果给定的数值不正确(不是数字),将返回false
	 * @param formula
	 *            验证公式(表达式包括:'&gt;', '&lt;', '&gt=', 'glt=', '==', '!=', '@'),
	 *            例如:<br>
	 *            <li>"&gt; 23" 表示当 value&gt;23 时返回真;<br>
	 *            <li>"&lt; 23" 表示当 value&lt;23 时返回真;<br>
	 *            <li>"&lt;= 23" 表示当 value&lt;=23 时返回真;<br>
	 *            <li>"&gt;= 23" 表示当 value&gt;=23 时返回真;<br>
	 *            <li>"== 23" 表示当 value==23 时返回真;<br>
	 *            <li>"!= 23" 表示当 value!=23 时返回真;<br>
	 *            <li>"@ (0,100)" 表示当 value位于(0,100)区间 时返回真;<br>
	 *            <li>"@ (0,100]" 表示当 value位于(0,100]区间 时返回真;<br>
	 *            <b>注意:关系运算符后必须加空格,如果给定的公式格式不正确,将返回false</b>
	 * @return 返回布尔值
	 */
	public static boolean condition(String value, String formula) {
		if (value == null)
			return false;
		if (!FloatUtil.isFloat(value))
			return false;

		if (formula == null)
			return false;

		formula = formula.trim();

		if (formula.length() < 4) {
			return false;
		}

		String symbol = formula.substring(0, 2).trim();

		if (symbol.equals(">"))
			return Condition.gt(DoubleUtil.parseDouble(value), formula);
		if (symbol.equals("<"))
			return Condition.lt(DoubleUtil.parseDouble(value), formula);
		if (symbol.equals(">="))
			return Condition.gteq(DoubleUtil.parseDouble(value), formula);
		if (symbol.equals("<="))
			return Condition.lteq(DoubleUtil.parseDouble(value), formula);
		if (symbol.equals("=="))
			return Condition.eq(DoubleUtil.parseDouble(value), formula);
		if (symbol.equals("!="))
			return Condition.noteq(DoubleUtil.parseDouble(value), formula);
		if (symbol.equals("@"))
			return Condition.area(DoubleUtil.parseDouble(value), formula);

		return false;
	}
}
